#include "component/menu_tree_list.h"

#include <QFile>

MenuTreeList::MenuTreeList(QWidget* parent): QTreeWidget(parent) {
    setHeaderHidden(true);              // 隐藏表头
    setIndentation(20);                 // 缩进量
    setIconSize(QSize(20, 20));         // 图标大小
    setFocusPolicy(Qt::NoFocus);        // 禁用焦点 

    // 设置项高度与文字垂直对齐
    setUniformRowHeights(true);  // 统一行高
    setIndentation(12);          // 调整缩进避免挤压图标
    setLayoutDirection(Qt::LeftToRight); // 设置布局方向


    initBindingSignalSlot();
    loadStyleSheet();
}

void MenuTreeList::loadStyleSheet() {
    QFile file(QString(":/resources/style/menu_tree_list.qss"));
    file.open(QFile::ReadOnly);
    if (file.isOpen())
    {
        QString styleSheet = this->styleSheet();
        styleSheet += file.readAll();
        this->setStyleSheet(styleSheet);
    }
}

void MenuTreeList::initBindingSignalSlot() {
    connect(this, &QTreeWidget::itemClicked, this, &MenuTreeList::onItemClicked);
}

QTreeWidgetItem* MenuTreeList::addMenuItem(const QString& text, const QIcon& icon, QTreeWidgetItem* parent) {
    QTreeWidgetItem* item = new QTreeWidgetItem();
    item->setText(0, text);
    item->setIcon(0, icon);

    // 自定义对齐方式
    item->setTextAlignment(0, Qt::AlignVCenter | Qt::AlignLeft);

    if (parent) {
        parent->addChild(item);
    } else {
        addTopLevelItem(item);
    }
    return item;
}


void MenuTreeList::onItemClicked(QTreeWidgetItem* item, int column) {
    if (item->childCount() > 0) { 
        // 父节点：切换展开状态
        item->setExpanded(!item->isExpanded());
    } else { 
        // 叶子节点：触发信号
        emit itemClicked(item);
    }
}

// 递归获取 QTreeWidgetItem 的路径
QString MenuTreeList::getItemPath(const QTreeWidgetItem *item) {
    if (!item) {
        return "";
    }
    // 获取当前节点的文本
    QString path = item->text(0);

    // 递归获取父节点的路径
    QTreeWidgetItem *parent = item->parent();
    if (parent) {
        path = getItemPath(parent) + " / " + path;
    }
    return path;
}